Imports Sicop.Classi
Imports System.Web


Public Class Anagrafica
    Inherits Connessione

    Public Enum tipoIndirizzo
        Residenza = 1
        Studio = 2
        Spedizione = 3
    End Enum

    Public Enum linguaIndirizzo
        Italiano = 1
        Tedesco = 2
    End Enum

    Public Enum tipoTS
        Diploma = 1
        Laurea_Breve = 2
        Laurea = 3
    End Enum

    Public Structure ind
        Public indirizzo As String
        Public indirizzo2 As String
        Public numCivico As String
        Public cap As String
        Public citta As String
        Public comune As String
        Public descComune As String
        Public zona As String
        Public comprensorio As String
        Public provincia As String
        Public telefono As String
        Public cellulare As String
        Public fax As String
        Public email As String
        Public privacyInd As Boolean
        Public privacyContatti As Boolean
        Public idLingua As String
        Public id_ana As String
        Public id_tipo As String
        Public IdComune As String
        Public IdComprensorio As String
        Public ComprensorioDescrizione As String
    End Structure

    Public Structure TS
        Public id As String
        Public tipo As String
        Public istituto As String
        Public voto As String
        Public anno As String
        Public dataLaurea As String
        Public cittaLaurea As String
        Public spec As String
        Public descSpec As String
    End Structure

    Private _diploma As TS
    Private _laureaBreve As TS
    Private _laurea As TS

    'dati anagrafici
    Private _idAna As String
    Private _verComune As Int16
    Private _verTrib As Int16
    Private _verIst As Int16
    Private _tipo As Int16
    Private _intest As String
    Private _nome As String
    Private _cognome As String
    Private _acquisito As String
    Private _provN As String
    Private _dataN As String
    Private _statoN As String
    Private _codFisc As String
    Private _comuneN As String
    Private _descComuneN As String
    Private _descStatoN As String
    Private _sesso As String
    Private _pIva As String

    Private _privacyN As Boolean

    Private _cittadinanza As String


    Public _residenza As ind
    Public _studio As ind
    Public _spedizione As ind
    Public _indPref As Int16
    Public _modPref As String
    Public _residenzaDE As ind
    Public _studioDE As ind
    Public _spedizioneDE As ind


    'numero in elenco
    Private _num As Int16

    'previdenza
    Private _matricolaPrev As String
    Private _dataPrev As String
    Private _dataCancPrev As String
    Private _tipoPrev As String

    Private _lingua As String = "I"


    Private _privacy As Boolean
    Public Property privacy() As Boolean
        Get
            Return _privacy
        End Get
        Set(ByVal Value As Boolean)
            _privacy = Value
        End Set
    End Property

    Public Property lingua() As String
        Get
            Return _lingua
        End Get
        Set(ByVal Value As String)
            _lingua = Value
        End Set
    End Property

    Public Property matricolaPrev() As String
        Get
            Return _matricolaPrev
        End Get
        Set(ByVal Value As String)
            _matricolaPrev = Value
        End Set
    End Property
    Public Property dataPrev() As String
        Get
            Return _dataPrev
        End Get
        Set(ByVal Value As String)
            _dataPrev = Value
        End Set
    End Property
    Public Property dataCancPrev() As String
        Get
            Return _dataCancPrev
        End Get
        Set(ByVal Value As String)
            _dataCancPrev = Value
        End Set
    End Property
    Public Property tipoPrev() As String
        Get
            Return _tipoPrev
        End Get
        Set(ByVal Value As String)
            _tipoPrev = Value
        End Set
    End Property

    Public Property verComune() As Int16
        Get
            Return _verComune
        End Get
        Set(ByVal Value As Int16)
            _verComune = Value
        End Set
    End Property
    Public Property verTrib() As Int16
        Get
            Return _verTrib
        End Get
        Set(ByVal Value As Int16)
            _verTrib = Value
        End Set
    End Property
    Public Property verIst() As Int16
        Get
            Return _verIst
        End Get
        Set(ByVal Value As Int16)
            _verIst = Value
        End Set
    End Property
    Public Property acquisito() As String
        Get
            Return _acquisito
        End Get
        Set(ByVal Value As String)
            _acquisito = Value
        End Set
    End Property

    Public Property indPref() As Int16
        Get
            Return _indPref
        End Get
        Set(ByVal Value As Int16)
            _indPref = Value
        End Set
    End Property

    Public Property modPref() As String
        Get
            Return _modPref
        End Get
        Set(ByVal Value As String)
            _modPref = Value
        End Set
    End Property

    Public Property cittadinanza() As String
        Get
            Return _cittadinanza
        End Get
        Set(ByVal Value As String)
            _cittadinanza = Value
        End Set
    End Property

    Public Property numElenco() As Int16
        Get
            Return _num
        End Get
        Set(ByVal Value As Int16)
            _num = Value
        End Set
    End Property


    Public Property descComuneN() As String
        Get
            Return _descComuneN
        End Get
        Set(ByVal Value As String)
            _descComuneN = Value
        End Set
    End Property



    Public Property descStatoN() As String
        Get
            Return _descStatoN
        End Get
        Set(ByVal Value As String)
            _descStatoN = Value
        End Set
    End Property

    Public Property privacyN() As Boolean
        Get
            Return _privacyN
        End Get
        Set(ByVal Value As Boolean)
            _privacyN = Value
        End Set
    End Property

    Public Property idAna() As String
        Get
            Return _idAna
        End Get
        Set(ByVal Value As String)
            _idAna = Value
        End Set
    End Property
    Public Property tipo() As Int16
        Get
            Return _tipo
        End Get
        Set(ByVal Value As Int16)
            _tipo = Value
        End Set
    End Property
    Public Property intest() As String
        Get
            Return _intest
        End Get
        Set(ByVal Value As String)
            _intest = Value
        End Set
    End Property
    Public Property nome() As String
        Get
            Return _nome
        End Get
        Set(ByVal Value As String)
            _nome = Value
        End Set
    End Property
    Public Property cognome() As String
        Get
            Return _cognome
        End Get
        Set(ByVal Value As String)
            _cognome = Value
        End Set
    End Property


    Public Property provN() As String
        Get
            Return Trim(_provN)
        End Get
        Set(ByVal Value As String)
            _provN = Value
        End Set
    End Property
    Public Property dataN() As String
        Get
            Return _dataN
        End Get
        Set(ByVal Value As String)
            _dataN = Value
        End Set
    End Property
    Public Property statoN() As String
        Get
            Return Trim(_statoN)
        End Get
        Set(ByVal Value As String)
            _statoN = Value
        End Set
    End Property
    Public Property codFisc() As String
        Get
            Return _codFisc
        End Get
        Set(ByVal Value As String)
            _codFisc = Value
        End Set
    End Property
    Public Property comuneN() As String
        Get
            Return _comuneN
        End Get
        Set(ByVal Value As String)
            _comuneN = Value
        End Set
    End Property
    Public Property sesso() As String
        Get
            Return _sesso
        End Get
        Set(ByVal Value As String)
            _sesso = Value
        End Set
    End Property
    Public Property pIva() As String
        Get
            Return _pIva
        End Get
        Set(ByVal Value As String)
            _pIva = Value
        End Set
    End Property
    Public Property residenza() As ind
        Get
            Return _residenza
        End Get
        Set(ByVal Value As ind)
            _residenza = Value
        End Set
    End Property
    Public Property studio() As ind
        Get
            Return _studio
        End Get
        Set(ByVal Value As ind)
            _studio = Value
        End Set
    End Property
    Public Property spedizione() As ind
        Get
            Return _spedizione
        End Get
        Set(ByVal Value As ind)
            _spedizione = Value
        End Set
    End Property

    Public Property residenzaDE() As ind
        Get
            Return _residenzaDE
        End Get
        Set(ByVal Value As ind)
            _residenzaDE = Value
        End Set
    End Property
    Public Property studioDE() As ind
        Get
            Return _studioDE
        End Get
        Set(ByVal Value As ind)
            _studioDE = Value
        End Set
    End Property
    Public Property spedizioneDE() As ind
        Get
            Return _spedizioneDE
        End Get
        Set(ByVal Value As ind)
            _spedizioneDE = Value
        End Set
    End Property

    Public Property diploma() As TS
        Get
            Return _diploma
        End Get
        Set(ByVal Value As TS)
            _diploma = Value
        End Set
    End Property
    Public Property laureaBreve() As TS
        Get
            Return _laureaBreve
        End Get
        Set(ByVal Value As TS)
            _laureaBreve = Value
        End Set
    End Property
    Public Property laurea() As TS
        Get
            Return _laurea
        End Get
        Set(ByVal Value As TS)
            _laurea = Value
        End Set
    End Property


    Public Function AnagraficaPresente(ByVal nome As String, ByVal cognome As String, ByVal tipo As Short) As DataTable
        Dim sql As String = "select Anagrafica.id, nome, cognome, convert(char(10),data_nascita, 103) as data_nascita from anagrafica "
        If tipo = 1 Then
            sql += " INNER JOIN Praticanti ON Anagrafica.ID = Praticanti.Id_ana "
        Else
            sql += " INNER JOIN AlboIscritti ON Anagrafica.ID = AlboIscritti.Id_ana "
        End If
        sql += " where nome = @nome and cognome=@cognome"

        Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sql, getConnection)

        cmd.Parameters.Add("@nome ", nome)
        cmd.Parameters.Add("@cognome", cognome)

        Dim myDAdp As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter
        Dim table As New DataTable
        myDAdp.SelectCommand = cmd
        myDAdp.Fill(table)
        cmd.Connection.Close()

        Return table

    End Function


    Public Sub carica()
        Dim dt As DataTable = getDataTable("SELECT   verComune, verTrib, verIst,  desc_comune_nascita as desc_comune, com_nascita,sesso, piva, p_Nascita, intest, nome, cognome, cognome_acquisito, com_nascita, prov_nascita, stato_nascita, cf, convert(char(10),data_nascita, 103) as data_nascita, " & _
                    "matricolaPrev, convert(char(10),dataPrev, 103) as dataPrev, convert(char(10),dataCancPrev,103) as dataCancPrev, tipoPrev, cittadinanza, privacypresente, lingua " & _
                    " from anagrafica  WHERE Id =" & _idAna)
        _intest = Utility.sNull(dt.Rows(0)("intest"))
        _nome = Utility.sNull(dt.Rows(0)("nome"))
        _cognome = Utility.sNull(dt.Rows(0)("cognome"))
        _acquisito = Utility.sNull(dt.Rows(0)("cognome_acquisito"))
        _provN = Utility.sNull(dt.Rows(0)("prov_nascita"))
        _dataN = Utility.sNull(dt.Rows(0)("data_nascita"))
        _statoN = Utility.sNull((dt.Rows(0)("stato_nascita")))
        _codFisc = Utility.sNull(dt.Rows(0)("CF"))
        _descComuneN = Utility.sNull(dt.Rows(0)("desc_comune"))
        _comuneN = Utility.sNull(dt.Rows(0)("com_nascita"))
        _sesso = Trim(Utility.sNull(dt.Rows(0)("sesso")))
        _pIva = Utility.sNull(dt.Rows(0)("piva"))
        _privacyN = dt.Rows(0)("p_Nascita")
        _verComune = dt.Rows(0)("verComune")
        _verTrib = dt.Rows(0)("verTrib")
        _verIst = dt.Rows(0)("verist")
        _matricolaPrev = Utility.sNull(dt.Rows(0)("matricolaPrev"))
        _dataPrev = Utility.sNull(dt.Rows(0)("dataPrev"))
        _dataCancPrev = Utility.sNull(dt.Rows(0)("dataCancPrev"))
        _tipoPrev = Utility.sNull(dt.Rows(0)("tipoPrev"))
        _cittadinanza = Utility.sNull(dt.Rows(0)("cittadinanza"))
        _privacy = dt.Rows(0)("privacypresente")
        _lingua = dt.Rows(0)("lingua")

    End Sub

    Public Function caricaTS(ByVal idTS As String) As TS
        Dim sql As String = "select * from titolidistudio where id= " & idTS
        Dim dr As DataRow = getDataTable(sql).Rows(0)
        Dim _titolo As TS
        With _titolo
            .tipo = dr("tipo_ts")
            .istituto = dr("codistituto")
            .spec = Utility.sNull(dr("tipo_ts_spec"))
            .voto = Utility.sNull(dr("Votazione"))
            .dataLaurea = Utility.sNull(dr("Data"))
            .anno = Utility.sNull(dr("anno"))

        End With

        Return _titolo
    End Function
    Public Function caricaTS() As DataTable
        Dim sql As String = "SELECT TitoliDiStudio.Id, TipoTitoloDiStudio.Descrizione AS Tipo, convert(char(10),TitoliDiStudio.Data,103) as data, TitoliDiStudio.Votazione, TitoloDiStudioSpecializzazione.Descrizione As Specializzazione, TitoliDiStudio.Citta as Citta,TitoliDiStudio.Anno "
        sql = sql & "FROM TitoliDiStudio INNER JOIN TipoTitoloDiStudio ON TitoliDiStudio.Tipo_Ts = TipoTitoloDiStudio.Codice LEFT OUTER JOIN TitoloDiStudioSpecializzazione ON TitoliDiStudio.Tipo_Ts_Spec = TitoloDiStudioSpecializzazione.Codice "
        sql = sql & "WHERE TitoliDiStudio.Id_ana = " & _idAna & ";"
        Dim dt As DataTable = getDataTable(sql)
        Return dt
    End Function


    Public Sub caricaIndirizzi()
        'Dim sql As String = "select Indirizzi.*, Comuni.Descrizione AS descComune,Comuni.DescrizioneD AS descComuneDE FROM Indirizzi left JOIN " & _
        '              "Comuni ON Indirizzi.Comune = Comuni.Codice where id_ana =" & _idAna

        Dim sql As String = "SELECT [Id_ana], [IdLingua], [TipoIndirizzo], [P_indirizzo], [Indirizzo], [NumCivico], [Indirizzo2], [CAP], [Citta], [Provincia], [Comune], [Desc_comune], [Zona], [P_contatti], [Telefono], [Cellulare], [Fax], [Email], [Preferito], [Mod], [Utente], [DataUpdate], [IdComprensorio], [Comprensorio], [DescComprensorio], [DescComune] FROM [vIndirizziComuneComprensorio] "
        sql += "WHERE id_ana =" & _idAna
        Dim dt As DataTable = getDataTable(sql)

        Dim dr As DataRow

        For Each dr In dt.Rows
            Select Case dr("tipoIndirizzo")
                Case tipoIndirizzo.Residenza
                    caricaIndirizzoResidenza(dr)

                Case tipoIndirizzo.Studio
                    caricaIndirizzoStudio(dr)

                Case tipoIndirizzo.Spedizione
                    caricaIndirizzoSpedizione(dr)

            End Select
        Next

    End Sub

    Public Sub caricaIndirizzoResidenza(ByVal dr As DataRow)
        With _residenza
            'SELECT Id_ana, IdLingua, TipoIndirizzo, P_indirizzo, Indirizzo, NumCivico, Indirizzo2, CAP, Citta, Provincia, Comune, Desc_comune, Zona, P_contatti, Telefono, Cellulare, Fax, Email, Preferito, Mod, Utente, DataUpdate, IdComprensorio, Comprensorio FROM  Indirizzi
            'Id_ana, IdLingua, TipoIndirizzo, P_indirizzo, Indirizzo, NumCivico, Indirizzo2, CAP, Citta, Provincia, Comune, Desc_comune, Zona, P_contatti, Telefono, Cellulare, Fax, Email, Preferito, Mod, Utente, DataUpdate, Comprensorio, ComuneDescrizione 
            '[Id_ana], [IdLingua], [TipoIndirizzo], [P_indirizzo], [Indirizzo], [NumCivico], [Indirizzo2], [CAP], [Citta], [Provincia],
            '[Comune], [Desc_comune], [Zona], [P_contatti], [Telefono], [Cellulare], [Fax], [Email], [Preferito], [Mod], [Utente], [DataUpdate], 
            '[IdComprensorio], [Comprensorio], [DescComprensorio], [DescComune])
            .idLingua = dr("IdLingua")
            .id_ana = dr("Id_ana")
            .id_tipo = dr("TipoIndirizzo")
            .indirizzo = Trim(Utility.sNull(dr("Indirizzo")))
            .numCivico = Trim(Utility.sNull(dr("NumCivico")))
            .cap = Trim(Utility.sNull(dr("CAP")))
            .citta = Trim(Utility.sNull(dr("Citta")))
            .provincia = Trim(Utility.sNull(dr("Provincia")))
            .comune = Utility.sNull(dr("Comune"))
            .descComune = Utility.sNull(dr("DescComune"))
            .telefono = Trim(Utility.sNull(dr("Telefono")))
            .fax = Trim(Utility.sNull(dr("Fax")))
            .comprensorio = Trim(Utility.sNull(dr("comprensorio")))
            .cellulare = Trim(Utility.sNull(dr("Cellulare")))
            .email = Trim(Utility.sNull(dr("Email")))
            .privacyInd = dr("p_indirizzo")
            .privacyContatti = dr("p_contatti")
            .IdComune = Utility.sNull(dr("Comune"))
            .IdComprensorio = Utility.sNull(dr("IdComprensorio"))
            .ComprensorioDescrizione = IIf(Trim(Utility.sNull(dr("DescComprensorio"))) = "-", String.Empty, Trim(Utility.sNull(dr("DescComprensorio"))))
            If dr("Preferito") Then
                _indPref = 1
                _modPref = dr("Mod")
            End If
        End With
    End Sub

    Public Sub caricaIndirizzoStudio(ByVal dr As DataRow)
        With _studio
            '[Id_ana], [IdLingua], [TipoIndirizzo], [P_indirizzo], [Indirizzo], [NumCivico], [Indirizzo2], [CAP], [Citta], [Provincia],
            '[Comune], [Desc_comune], [Zona], [P_contatti], [Telefono], [Cellulare], [Fax], [Email], [Preferito], [Mod], [Utente], [DataUpdate], 
            '[IdComprensorio], [Comprensorio], [DescComprensorio], [DescComune])
            .idLingua = dr("IdLingua")
            .id_ana = dr("Id_ana")
            .id_tipo = dr("TipoIndirizzo")
            .indirizzo2 = Trim(Utility.sNull(dr("Indirizzo2")))
            .indirizzo = Trim(Utility.sNull(dr("Indirizzo")))
            .numCivico = Trim(Utility.sNull(dr("NumCivico")))
            .cap = Trim(Utility.sNull(dr("CAP")))
            .citta = Trim(Utility.sNull(dr("Citta")))
            .provincia = Trim(Utility.sNull(dr("Provincia")))
            .comune = Utility.sNull(dr("Comune"))
            .descComune = Utility.sNull(dr("DescComune"))
            .telefono = Trim(Utility.sNull(dr("Telefono")))
            .fax = Trim(Utility.sNull(dr("Fax")))
            .comprensorio = Trim(Utility.sNull(dr("comprensorio")))
            .cellulare = Trim(Utility.sNull(dr("Cellulare")))
            .email = Trim(Utility.sNull(dr("Email")))
            .privacyInd = dr("p_indirizzo")
            .privacyContatti = dr("p_contatti")
            .IdComune = Utility.sNull(dr("Comune"))
            .IdComprensorio = Utility.sNull(dr("IdComprensorio"))
            .ComprensorioDescrizione = IIf(Trim(Utility.sNull(dr("DescComprensorio"))) = "-", String.Empty, Trim(Utility.sNull(dr("DescComprensorio"))))
            If dr("Preferito") Then
                _indPref = 1
                _modPref = dr("Mod")
            End If

            If dr("preferito") Then
                _indPref = 2
                _modPref = dr("mod")
            End If
        End With
    End Sub

    Public Sub caricaIndirizzoSpedizione(ByVal dr As DataRow)
        With _spedizione
            '[Id_ana], [IdLingua], [TipoIndirizzo], [P_indirizzo], [Indirizzo], [NumCivico], [Indirizzo2], [CAP], [Citta], [Provincia],
            '[Comune], [Desc_comune], [Zona], [P_contatti], [Telefono], [Cellulare], [Fax], [Email], [Preferito], [Mod], [Utente], [DataUpdate], 
            '[IdComprensorio], [Comprensorio], [DescComprensorio], [DescComune])
            .idLingua = dr("IdLingua")
            .id_ana = dr("Id_ana")
            .id_tipo = dr("TipoIndirizzo")
            .indirizzo2 = Trim(Utility.sNull(dr("Indirizzo2")))
            .indirizzo = Trim(Utility.sNull(dr("Indirizzo")))
            .numCivico = Trim(Utility.sNull(dr("NumCivico")))
            .cap = Trim(Utility.sNull(dr("CAP")))
            .citta = Trim(Utility.sNull(dr("Citta")))
            .provincia = Trim(Utility.sNull(dr("Provincia")))
            .comune = Utility.sNull(dr("Comune"))
            .descComune = Utility.sNull(dr("DescComune"))
            .telefono = Trim(Utility.sNull(dr("Telefono")))
            .fax = Trim(Utility.sNull(dr("Fax")))
            .comprensorio = Trim(Utility.sNull(dr("comprensorio")))
            .cellulare = Trim(Utility.sNull(dr("Cellulare")))
            .email = Trim(Utility.sNull(dr("Email")))
            .privacyInd = dr("p_indirizzo")
            .privacyContatti = dr("p_contatti")
            .IdComune = Utility.sNull(dr("Comune"))
            .IdComprensorio = Utility.sNull(dr("IdComprensorio"))
            .ComprensorioDescrizione = IIf(Trim(Utility.sNull(dr("DescComprensorio"))) = "-", String.Empty, Trim(Utility.sNull(dr("DescComprensorio"))))
            If dr("preferito") Then
                _indPref = 3
                _modPref = dr("mod")
            End If
        End With
    End Sub

    Public Function getCategorieElenco() As DataTable
        Return getDataTable("SELECT '' as codice,''as descrizione union select codice,descrizione from categorie")
    End Function

    Public Function getCategorie() As DataTable
        Return getDataTable("SELECT AnaCategorie.id, Descrizione FROM  AnaCategorie INNER JOIN " & _
            " Categorie ON AnaCategorie.Tipo_cat = Categorie.Codice WHERE AnaCategorie.Id_ana =" & _idAna)

    End Function

    Public Sub addCategoria(ByVal _tipoCat As Int16)
        Dim sql As String = "insert into anacategorie (tipo_cat,id_ana) values (" & _tipoCat & ", " & _idAna & ")"
        eseguiSql(sql)
    End Sub

    Public Sub delCategoria(ByVal _idCat As String)
        Dim sql As String = "delete from anacategorie where id=" & _idCat
        eseguiSql(sql)
    End Sub


    Public Sub addRubricaCategoria(ByVal idRubrica As String, ByVal idCategoria As String)
        Dim sql As String = "insert into RubricaCategorie (idRubrica,idCategoria) values (" & idRubrica & ", " & idCategoria & ")"
        eseguiSql(sql)
    End Sub

    Public Sub delRubricaCategoria(ByVal _idRub As String)
        Dim sql As String = "delete from RubricaCategorie where idRubrica=" & _idRub
        eseguiSql(sql)
    End Sub

    Public Function getRubricaCategorie(ByVal idRubrica As String) As DataTable
        Return getDataTable("select RubricaCategorie.id,RubricaCategorie.idRubrica,RubricaCategorie.idCategoria,Categorie.descrizione from categorie inner join RubricaCategorie on RubricaCategorie.idCategoria = Categorie.codice where idRubrica =" & idRubrica & "")

    End Function


    Public Sub inserisci()

        _idAna = eseguiSPInsert("insertAna")

        aggiorna()

    End Sub


    Public Sub aggiornaVerifica()
        eseguiSql("update anagrafica set verComune=" & _verComune & ", verTrib = " & _verTrib & ", verIst=" & _verIst & " where id=" & _idAna)
    End Sub

    Public Sub aggiornaPrev()
        Dim sql As String = "update anagrafica set matricolaPrev=@matricolaPrev, dataPrev=@dataPrev, dataCancPrev=@dataCancPrev, tipoPrev=@tipoPrev, utente=@utente where id=" & _idAna
        Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sql, getConnection)
        cmd.Parameters.AddWithValue("@matricolaPrev", _matricolaPrev)
        cmd.Parameters.AddWithValue("@dataPrev", IIf(_dataPrev = "", SqlTypes.SqlDateTime.Null, Utility.FormattaDataxDB(_dataPrev)))
        cmd.Parameters.AddWithValue("@dataCancPrev", IIf(_dataCancPrev = "", SqlTypes.SqlDateTime.Null, Utility.FormattaDataxDB(_dataCancPrev)))
        cmd.Parameters.AddWithValue("@tipoPrev", IIf(_tipoPrev = "", SqlTypes.SqlInt16.Null, _tipoPrev))
        cmd.Parameters.AddWithValue("@Utente", System.Security.Principal.WindowsIdentity.GetCurrent.Name)

        cmd.ExecuteNonQuery()
        cmd.Connection.Close()
    End Sub



    Public Sub aggiorna()

        Dim sql As String = "update anagrafica set  p_Nascita=@privacyN, intest=@intest, nome =@nome , cognome=@cognome, cognome_acquisito = @acquisito, " & _
            " prov_nascita =@provN, data_nascita =@dataN, stato_nascita =@statoN, cittadinanza = @cittadinanza,  " & _
            " com_nascita = @ComuneN, desc_comune_nascita = @descComune, desc_stato_nascita=@descStato, sesso =@sesso, cf=@codfisc, piva=@piva, verComune=@verComune, verTrib=@verTrib, verIst=@verIst,  utente=@utente, albo=@albo, privacypresente=@privacy, lingua = @lingua where id = " & _idAna
        Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sql, getConnection)

        cmd.Parameters.AddWithValue("@privacyN", _privacyN)
        cmd.Parameters.AddWithValue("@intest", _intest)
        cmd.Parameters.AddWithValue("@nome", _nome)
        cmd.Parameters.AddWithValue("@cognome", _cognome)
        cmd.Parameters.AddWithValue("@acquisito", _acquisito)

        cmd.Parameters.AddWithValue("@provN", _provN)
        cmd.Parameters.AddWithValue("@dataN", IIf(_dataN = "", SqlTypes.SqlDateTime.Null, Utility.FormattaDataxDB(_dataN)))
        cmd.Parameters.AddWithValue("@statoN", IIf(_statoN = "", SqlTypes.SqlInt16.Null, _statoN))
        cmd.Parameters.AddWithValue("@cittadinanza", IIf(_cittadinanza = "", SqlTypes.SqlInt16.Null, _cittadinanza))
        cmd.Parameters.AddWithValue("@ComuneN", _comuneN)
        cmd.Parameters.AddWithValue("@descComune", _descComuneN)
        cmd.Parameters.AddWithValue("@descStato", _descStatoN)
        cmd.Parameters.AddWithValue("@sesso", _sesso)
        cmd.Parameters.AddWithValue("@codfisc", _codFisc)
        cmd.Parameters.AddWithValue("@piva", _pIva)
        cmd.Parameters.AddWithValue("@verComune", _verComune)
        cmd.Parameters.AddWithValue("@verTrib", _verTrib)
        cmd.Parameters.AddWithValue("@verIst", _verIst)
        cmd.Parameters.AddWithValue("@Utente", System.Security.Principal.WindowsIdentity.GetCurrent.Name)
        cmd.Parameters.AddWithValue("@albo", HttpContext.Current.Session("albo"))
        cmd.Parameters.AddWithValue("@privacy", _privacy)
        cmd.Parameters.AddWithValue("@lingua", _lingua)

        cmd.ExecuteNonQuery()
        cmd.Connection.Close()
    End Sub

    Public Function caricaCittaIstituto(ByVal idIstituto As Integer) As String
        If idIstituto > 0 Then
            Dim sql = "select citta from istituto where id=" & idIstituto

            Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sql, getConnection)

            Dim cit As Object = cmd.ExecuteScalar()

            Return cit

        End If

    End Function

    Public Sub aggiornaTS(ByVal obj As TS)
        Dim cmd As SqlClient.SqlCommand
        Dim sqlIns As String = "INSERT INTO TitoliDiStudio (Id_ana, Tipo_Ts, Tipo_Ts_Spec, CodIstituto, Anno,  Votazione) "
        sqlIns += "VALUES (" & _idAna & ", @Tipo_Ts, @Tipo_Ts_Spec, @CodIstituto, @Anno, @Votazione)"
        Dim sqlUpdate As String = "UPDATE TitoliDiStudio SET Tipo_Ts =@Tipo_Ts, Tipo_Ts_Spec =@Tipo_Ts_Spec, CodIstituto =@CodIstituto , Anno =@Anno , Votazione =@Votazione "
        sqlUpdate += "WHERE Id = " & obj.id
        If obj.id = "" Then
            cmd = New SqlClient.SqlCommand(sqlIns, getConnection)
        Else
            cmd = New SqlClient.SqlCommand(sqlUpdate, getConnection)
        End If

        With obj
            cmd.Parameters.Add("@Tipo_Ts", .tipo)
            cmd.Parameters.Add("@Tipo_Ts_Spec", IIf(.spec = String.Empty, System.DBNull.Value, .spec))
            cmd.Parameters.Add("@CodIstituto", IIf(.istituto = String.Empty, System.DBNull.Value, .istituto))
            cmd.Parameters.Add("@Votazione", .voto)
            cmd.Parameters.Add("@Anno", .anno)
            cmd.ExecuteNonQuery()
        End With


        cmd.Connection.Close()
    End Sub
    Public Shared Function AggiornaTitoliDiStudio(ByVal _id As Integer, ByVal _idAna As Integer, ByVal _tipo As Integer, ByVal _idSpec As Integer, ByVal _idIstituto As Integer, ByVal _anno As Integer, ByVal _votazione As String) As Boolean
        Dim r As Boolean = True
        Dim i As Integer

        Dim sSql As String
        Dim cmd As SqlClient.SqlCommand
        Dim sqlIns As String = "INSERT INTO TitoliDiStudio (Id_ana, Tipo_Ts, Tipo_Ts_Spec, CodIstituto, Anno, Data, Votazione) "
        sqlIns += "VALUES (" & _idAna & ", " & _tipo & ", " & _idSpec & "," & _idIstituto & "," & IIf(_anno < 1, "NULL", _anno) & ",@Data,'" & _votazione.Replace("'", "''") & "');SELECT @@IDENTITY;"
        Dim sqlUpdate As String = "UPDATE TitoliDiStudio SET Tipo_Ts = " & _tipo & ", Tipo_Ts_Spec = " & _idSpec & ", CodIstituto = " & _idIstituto & ",Anno = " & IIf(_anno < 1, "NULL", _anno) & ", Data = @Data, Votazione = '" & _votazione.Replace("'", "''") & "' "
        sqlUpdate += "WHERE Id = " & _id
        If _id < 1 Then
            cmd = New SqlClient.SqlCommand(sqlIns)
        Else
            cmd = New SqlClient.SqlCommand(sqlUpdate)
        End If
        If (_anno > 0) Then
            cmd.Parameters.Add("@Data", New System.DateTime(_anno, 12, 31))
        Else
            cmd.Parameters.Add("@Data", System.DBNull.Value)
        End If
        Dim cn As New Connessione
        sSql = "UPDATE [TitoliDiStudio] SET [Citta] = (SELECT LTRIM(RTRIM(ISNULL(Citta,''))) + ' (' + ISNULL(Provincia,'') + ')' FROM Istituto WHERE Id = TitoliDiStudio.CodIstituto), [Desc_Spec] =  (SELECT Descrizione FROM TitoloDiStudioSpecializzazione WHERE Codice = TitoliDiStudio.Tipo_Ts_Spec) "
        sSql += "WHERE Id = "
        If (_id > 0) Then
            cn.ExecuteNonQuerySqlCommand(cmd)
            i = _id
        Else
            i = cn.eseguiSqlCommandInsertAndGetIdentity(cmd)
        End If
        If (i > 0) Then
            cn.eseguiSql(sSql & i)
        End If
        Return r
    End Function
    Public Sub AggiornaIndirizzo(ByVal iTipo As Integer, ByVal oIndi As Anagrafica.ind)
        Dim sql As String
        sql = "UPDATE Indirizzi SET Indirizzo=@indirizzo, indirizzo2=@indirizzo2, cap=@cap, citta=@citta, provincia=@provincia, comune=@comune, desc_comune=@descComune, zona=@zona, comprensorio=@comprensorio, telefono=@telefono, cellulare=@cellulare, fax=@fax, email=@email, mod=@mod, utente=@utente, IdComprensorio=@IdComprensorio "
        sql += "WHERE Id_Ana = " & _idAna & " AND TipoIndirizzo = " & iTipo & " AND IdLingua=1"

        Dim cmd As New SqlClient.SqlCommand(sql) '= New SqlClient.SqlCommand(sql, getConnection)

        cmd.Parameters.Add("@indirizzo", SqlDbType.VarChar, 100)
        cmd.Parameters.Add("@indirizzo2", SqlDbType.VarChar, 100)
        cmd.Parameters.Add("@cap", SqlDbType.Char, 5)
        cmd.Parameters.Add("@citta", SqlDbType.VarChar, 50)
        cmd.Parameters.Add("@provincia", SqlDbType.Char, 2)
        cmd.Parameters.Add("@comune", SqlDbType.Int, 4)
        cmd.Parameters.Add("@descComune", SqlDbType.VarChar, 100)
        cmd.Parameters.Add("@zona", System.DBNull.Value)
        cmd.Parameters.Add("@comprensorio", SqlDbType.Char, 2)
        cmd.Parameters.Add("@telefono", SqlDbType.VarChar, 25)
        cmd.Parameters.Add("@cellulare", SqlDbType.VarChar, 25)
        cmd.Parameters.Add("@fax", SqlDbType.VarChar, 25)
        cmd.Parameters.Add("@email", SqlDbType.VarChar, 100)
        cmd.Parameters.Add("@mod", "0")
        cmd.Parameters.Add("@Utente", System.Security.Principal.WindowsIdentity.GetCurrent.Name)
        cmd.Parameters.Add("@IdComprensorio", SqlDbType.Int, 4)
        With oIndi
            cmd.Parameters("@indirizzo").Value = Connessione.stringToDbField(.indirizzo)
            cmd.Parameters("@indirizzo2").Value = Connessione.stringToDbField(.indirizzo2)
            cmd.Parameters("@cap").Value = Connessione.stringToDbField(.cap)
            cmd.Parameters("@citta").Value = Connessione.stringToDbField(.citta)
            cmd.Parameters("@provincia").Value = Connessione.stringToDbField(.provincia)
            cmd.Parameters("@comune").Value = IIf(.comune = "", SqlTypes.SqlInt32.Null, .comune)
            cmd.Parameters("@descComune").Value = Connessione.stringToDbField(.descComune)
            cmd.Parameters("@comprensorio").Value = Connessione.stringToDbField(.comprensorio)
            cmd.Parameters("@telefono").Value = Connessione.stringToDbField(.telefono)
            cmd.Parameters("@cellulare").Value = Connessione.stringToDbField(.cellulare)
            cmd.Parameters("@fax").Value = Connessione.stringToDbField(.fax)
            cmd.Parameters("@email").Value = Connessione.stringToDbField(.email)
            cmd.Parameters("@IdComprensorio").Value = IIf(Utility.StringIsNullOrEmpty(.IdComprensorio), SqlTypes.SqlInt32.Null, .IdComprensorio)
            cmd.Parameters("@Utente").Value = System.Security.Principal.WindowsIdentity.GetCurrent.Name
            Me.ExecuteNonQuerySqlCommand(cmd)
        End With
    End Sub
    'Public Sub aggiornaIndirizzi()
    '    Dim sql As String
    '    sql = "UPDATE Indirizzi SET Indirizzo=@indirizzo, indirizzo2=@indirizzo2, cap=@cap, citta=@citta, provincia=@provincia, comune=@comune, desc_comune=@descComune, zona=@zona, comprensorio=@comprensorio, telefono=@telefono, cellulare=@cellulare, fax=@fax, email=@email, mod=@mod, utente=@utente "
    '    sql += "WHERE Id_Ana = " & _idAna & " AND TipoIndirizzo = @tipo AND IdLingua=1"

    '    Dim cmd As New SqlClient.SqlCommand(sql) '= New SqlClient.SqlCommand(sql, getConnection)

    '    cmd.Parameters.Add("@indirizzo", SqlDbType.VarChar, 100)
    '    cmd.Parameters.Add("@indirizzo2", SqlDbType.VarChar, 100)
    '    cmd.Parameters.Add("@cap", SqlDbType.Char, 5)
    '    cmd.Parameters.Add("@citta", SqlDbType.VarChar, 50)
    '    cmd.Parameters.Add("@provincia", SqlDbType.Char, 2)
    '    cmd.Parameters.Add("@comune", SqlDbType.Int, 4)
    '    cmd.Parameters.Add("@descComune", SqlDbType.VarChar, 100)
    '    cmd.Parameters.Add("@zona", System.DBNull.Value)
    '    cmd.Parameters.Add("@comprensorio", SqlDbType.Char, 2)
    '    cmd.Parameters.Add("@telefono", SqlDbType.VarChar, 25)
    '    cmd.Parameters.Add("@cellulare", SqlDbType.VarChar, 25)
    '    cmd.Parameters.Add("@fax", SqlDbType.VarChar, 25)
    '    cmd.Parameters.Add("@email", SqlDbType.VarChar, 100)
    '    cmd.Parameters.Add("@mod", "0")
    '    cmd.Parameters.Add("@Utente", System.Security.Principal.WindowsIdentity.GetCurrent.Name)
    '    cmd.Parameters.Add("@tipo", SqlDbType.SmallInt)

    '    aggiornaResidenza(cmd)

    '    aggiornaStudio(cmd)

    '    aggiornaSpedizione(cmd)

    '    cmd.Connection.Close()
    'End Sub

    'Public Sub aggiornaResidenza(ByVal cmd As SqlClient.SqlCommand)
    '    With _residenza
    '        cmd.Parameters("@indirizzo").Value = Connessione.stringToDbField(.indirizzo)
    '        cmd.Parameters("@indirizzo2").Value = Connessione.stringToDbField(.indirizzo2)
    '        cmd.Parameters("@cap").Value = Connessione.stringToDbField(.cap)
    '        cmd.Parameters("@citta").Value = Connessione.stringToDbField(.citta)
    '        cmd.Parameters("@provincia").Value = Connessione.stringToDbField(.provincia)
    '        cmd.Parameters("@comune").Value = IIf(.comune = "", SqlTypes.SqlInt32.Null, .comune)
    '        cmd.Parameters("@descComune").Value = Connessione.stringToDbField(.descComune)
    '        cmd.Parameters("@comprensorio").Value = Connessione.stringToDbField(.comprensorio)
    '        cmd.Parameters("@telefono").Value = Connessione.stringToDbField(.telefono)
    '        cmd.Parameters("@cellulare").Value = Connessione.stringToDbField(.cellulare)
    '        cmd.Parameters("@fax").Value = Connessione.stringToDbField(.fax)
    '        cmd.Parameters("@email").Value = Connessione.stringToDbField(.email)
    '        cmd.Parameters("@Utente").Value = System.Security.Principal.WindowsIdentity.GetCurrent.Name
    '        cmd.Parameters("@tipo").Value = 1
    '        Me.ExecuteNonQuerySqlCommand(cmd)
    '    End With
    'End Sub

    'Public Sub aggiornaStudio(ByVal cmd As SqlClient.SqlCommand)
    '    With _studio
    '        cmd.Parameters("@indirizzo").Value = Connessione.stringToDbField(.indirizzo)
    '        cmd.Parameters("@indirizzo2").Value = Connessione.stringToDbField(.indirizzo2)
    '        cmd.Parameters("@cap").Value = Connessione.stringToDbField(.cap)
    '        cmd.Parameters("@citta").Value = Connessione.stringToDbField(.citta)
    '        cmd.Parameters("@provincia").Value = Connessione.stringToDbField(.provincia)
    '        cmd.Parameters("@comune").Value = IIf(.comune = "", SqlTypes.SqlInt32.Null, .comune)
    '        cmd.Parameters("@descComune").Value = Connessione.stringToDbField(.descComune)
    '        cmd.Parameters("@comprensorio").Value = Connessione.stringToDbField(.comprensorio)
    '        cmd.Parameters("@telefono").Value = Connessione.stringToDbField(.telefono)
    '        cmd.Parameters("@cellulare").Value = Connessione.stringToDbField(.cellulare)
    '        cmd.Parameters("@fax").Value = Connessione.stringToDbField(.fax)
    '        cmd.Parameters("@email").Value = Connessione.stringToDbField(.email)
    '        cmd.Parameters("@Utente").Value = System.Security.Principal.WindowsIdentity.GetCurrent.Name
    '        cmd.Parameters("@tipo").Value = 2
    '        Me.ExecuteNonQuerySqlCommand(cmd)
    '    End With
    'End Sub

    'Public Sub aggiornaSpedizione(ByVal cmd As SqlClient.SqlCommand)

    '    With _spedizione
    '        If _spedizione.indirizzo <> "" Then
    '            cmd.Parameters("@indirizzo").Value = Connessione.stringToDbField(.indirizzo)
    '            cmd.Parameters("@indirizzo2").Value = Connessione.stringToDbField(.indirizzo2)
    '            cmd.Parameters("@cap").Value = Connessione.stringToDbField(.cap)
    '            cmd.Parameters("@citta").Value = Connessione.stringToDbField(.citta)
    '            cmd.Parameters("@provincia").Value = Connessione.stringToDbField(.provincia)
    '            cmd.Parameters("@comune").Value = IIf(.comune = "", SqlTypes.SqlInt32.Null, .comune)
    '            cmd.Parameters("@descComune").Value = Connessione.stringToDbField(.descComune)
    '            cmd.Parameters("@comprensorio").Value = Connessione.stringToDbField(.comprensorio)
    '            cmd.Parameters("@telefono").Value = Connessione.stringToDbField(.telefono)
    '            cmd.Parameters("@cellulare").Value = Connessione.stringToDbField(.cellulare)
    '            cmd.Parameters("@fax").Value = Connessione.stringToDbField(.fax)
    '            cmd.Parameters("@email").Value = Connessione.stringToDbField(.email)
    '            cmd.Parameters("@Utente").Value = System.Security.Principal.WindowsIdentity.GetCurrent.Name
    '        Else
    '            'se manca l'indirizzo di spedizione memorizzo quello dello studio
    '            If _studio.indirizzo <> "" Then
    '                With _studio
    '                    cmd.Parameters("@indirizzo").Value = Connessione.stringToDbField(.indirizzo)
    '                    cmd.Parameters("@indirizzo2").Value = Connessione.stringToDbField(.indirizzo2)
    '                    cmd.Parameters("@cap").Value = Connessione.stringToDbField(.cap)
    '                    cmd.Parameters("@citta").Value = Connessione.stringToDbField(.citta)
    '                    cmd.Parameters("@provincia").Value = Connessione.stringToDbField(.provincia)
    '                    cmd.Parameters("@comune").Value = IIf(.comune = "", SqlTypes.SqlInt32.Null, .comune)
    '                    cmd.Parameters("@descComune").Value = Connessione.stringToDbField(.descComune)
    '                    cmd.Parameters("@comprensorio").Value = Connessione.stringToDbField(.comprensorio)
    '                    cmd.Parameters("@telefono").Value = Connessione.stringToDbField(.telefono)
    '                    cmd.Parameters("@cellulare").Value = Connessione.stringToDbField(.cellulare)
    '                    cmd.Parameters("@fax").Value = Connessione.stringToDbField(.fax)
    '                    cmd.Parameters("@email").Value = Connessione.stringToDbField(.email)
    '                    cmd.Parameters("@Utente").Value = System.Security.Principal.WindowsIdentity.GetCurrent.Name
    '                    cmd.Parameters("@tipo").Value = 3
    '                End With
    '            Else
    '                'se manca anche quello dello studio memorizzo la residenza
    '                With _residenza
    '                    If .indirizzo <> "" Then
    '                        cmd.Parameters("@indirizzo").Value = Connessione.stringToDbField(.indirizzo)
    '                        cmd.Parameters("@indirizzo2").Value = Connessione.stringToDbField(.indirizzo2)
    '                        cmd.Parameters("@cap").Value = Connessione.stringToDbField(.cap)
    '                        cmd.Parameters("@citta").Value = Connessione.stringToDbField(.citta)
    '                        cmd.Parameters("@provincia").Value = Connessione.stringToDbField(.provincia)
    '                        cmd.Parameters("@comune").Value = IIf(.comune = "", SqlTypes.SqlInt32.Null, .comune)
    '                        cmd.Parameters("@descComune").Value = Connessione.stringToDbField(.descComune)
    '                        cmd.Parameters("@comprensorio").Value = Connessione.stringToDbField(.comprensorio)
    '                        cmd.Parameters("@telefono").Value = Connessione.stringToDbField(.telefono)
    '                        cmd.Parameters("@cellulare").Value = Connessione.stringToDbField(.cellulare)
    '                        cmd.Parameters("@fax").Value = Connessione.stringToDbField(.fax)
    '                        cmd.Parameters("@email").Value = Connessione.stringToDbField(.email)
    '                        cmd.Parameters("@Utente").Value = System.Security.Principal.WindowsIdentity.GetCurrent.Name
    '                        cmd.Parameters("@tipo").Value = 3
    '                    End If
    '                End With
    '            End If
    '        End If
    '        Me.ExecuteNonQuerySqlCommand(cmd)
    '    End With

    'End Sub

    Public Function elencoStati() As DataTable
        Return getDataTable("select null as codice, '' as descrizione union select codice, descrizione from stati order by descrizione")
    End Function

    Public Function elencoProvince() As DataTable
        Return getDataTable("select '' as codice, '' as descrizione union  select codice, descrizione from province order by descrizione")
    End Function

    Public Function elencoComprensori() As DataTable
        Return getDataTable("select '' as codice, '' as descrizione union  select codice, codice + ' ' + descrizione as descrizione from tipoComprensorio order by descrizione")
    End Function


    Public Function elencoZone() As DataTable
        Return getDataTable("select '' as codice, '' as descrizione union  select codice, codice + ' ' + descrizione as descrizione from tipoComprensorio order by codice, descrizione")
    End Function
    Public Function elencoCitt() As DataTable
        Return getDataTable("select null as codice, '' as descrizione union  select codice, descrizione from tipoCittadinanza")
    End Function

    Public Function elencoTipoPrev() As DataTable
        Return getDataTable("select null as codice, '' as descrizione union  select codice, descrizione from tipoPrevidenza")
    End Function

    Public Function elencoComuni(ByVal prov As String) As DataTable
        Dim sql As String = "select 0 as codice, '' as descrizione union  select codice, descrizione from comuni  where (CodiceCatasto not LIKE 'z%') "
        If prov <> "" Then
            sql += " and provincia='" & prov & "' "
        End If
        Return getDataTable(sql)
    End Function

    Public Function elencoComuniCombo(ByVal comune As String) As DataTable
        Dim sql As String = "select 0 as codice, '' as descrizione union  select codice, descrizione + ' (' + provincia + ')' as descrizione from comuni  where (descrizione LIKE '" & comune & "%') "

        Return getDataTable(sql)
    End Function

    Public Function elencoCategorie() As DataTable
        Return getDataTable("select null as codice, '' as descrizione union select codice, descrizione from categorie order by descrizione")
    End Function

    Public Function elencoSettoriPeriti() As DataTable
        Return getDataTable("select null as codice, '' as descrizione union select codice, descrizione from  tiposettoriPeriti ")

    End Function

    Public Function getCodiceCatasto(ByVal cod As String) As String
        Return (New Connessione).getValore("SELECT CodiceCatasto FROM Comuni WHERE Codice = " & cod)
    End Function


End Class


Public Class Anagrafiche
    Inherits Connessione

    Private _anag As Anagrafica


    Public Sub New(Optional ByVal newInstance As Boolean = False)

        If (HttpContext.Current.Session("ANAGRAFICA") Is Nothing Or newInstance) Then
            ' new instance here ;)
            _anag = New Anagrafica
            HttpContext.Current.Session("ANAGRAFICA") = _anag
        Else
            _anag = HttpContext.Current.Session("ANAGRAFICA")
        End If
    End Sub


    Public Property Anagrafica() As Anagrafica
        Get
            Return _anag
        End Get
        Set(ByVal Value As Anagrafica)
            _anag = Value
        End Set
    End Property
End Class